8位机最常见的应用单片机驱动马达IC工作,马达可支持无级调速(PWM),正转,反转,刹车。该应用简单高效适应于各种应用,节约成本的不二选择。

今天就跟大家分享曾经做过的马达驱动IC的应用。

主电路由8位单片机提供控制信号,正转,反转,PWM调速,以及一个峰值电流400ma的马达驱动IC构成。见电路图。

S1按一下正转,按一下停机

S2按一下反转,按一下停机

S3按一下加一级速度

S4按一下减一级速度

由于硬件不支持PWM,PWM使用IO模拟的方式产生。

/* =========================================================================* Project:       GPIO_Setting* File:          main.c* Description:   Set GPIO of PORTB*                  1. PORTB I/O state*                      - PB4 set input mode and enable pull-high resistor*                      - PB2 set output mode *                      - PB1 set input mode and enable pull-low resistor*                      - PB0 set open-drain output mode                               *                                                          * Author:        JasonLee* Version:       V1.1                              * Date:          2018/09/07=========================================================================*/
#include <ny8.h>
#include "ny8_constant.h"
#include <stdint.h>
#define UPDATE_REG(x)    __asm__("MOVR _" #x ",F")uint8_t pwmdcycle = 0;  //计数1000为一个周期
uint8_t pwmduty1 = 0;
uint8_t pwmduty2 = 0;
uint8_t pwmduty1s = 0;
uint8_t pwmduty2s = 0;
uint8_t spstate = 1;
uint8_t direction = 0; //stop 0  fw 1 bk 2//uint8_t spdstate = 1;     //10档
int16_t seccount = 0;    int16_t tim1count = 0;
int16_t tim1scount = 0;
uint8_t sw1flg = 0;
int16_t tim2count = 0;
int16_t tim2scount = 0;
uint8_t sw2flg = 0;
uint16_t tim3count = 0;
uint8_t sw3flg = 0;
uint8_t tim4count = 0;
uint8_t sw4flg = 0;void peripinit(void)
{//;Initial GPIO  //      ; PORTB I/O state//        ; PB0、PB1、PB2 set output mode and enable pull-high resister   BPHCON = (uint8_t) ~( C_PB5_PHB | C_PB4_PHB | C_PB2_PHB) ;        // Enable PB5、PB4、PB2 Pull-High Resistor,others disableIOSTB = (uint8_t) (C_PB5_Input | C_PB4_Input | C_PB3_Input | C_PB2_Input) ;    // Set PB5、PB3、PB3 PB2 to output mode,others set to input modePORTB = 0x00;//;Initial time1//      ;instrclk i_hrc 4/4M  div = 1  计数8次溢出即可//      ;TMR1 = 0xC8;    //到0下溢出中断,计数 //4M/200 = 20K/20 = 1KT1CR1 = C_TMR1_Reload | C_TMR1_En;   //自动重载T1CR2 = C_TMR1_ClkSrc_Inst | C_PS1_Dis ;  //指令时钟//T1CR1 =( T1CR1 | C_TMR1_En ); //使能定时器INTE = INTE | C_INT_TMR1;
}//尽量减小中断代码时长
void isr_hw(void) __interrupt(0)
{if(INTFbits.T1IF)        //占空比为 cycle-duty{pwmdcycle++;       if( pwmdcycle == pwmduty1s ){if(direction == 1)  //FW{PORTBbits.PB0 = 1;PORTBbits.PB1 = 0;}else if(direction == 2)  //BK{PORTBbits.PB0 = 0;PORTBbits.PB1 = 1;}else if(direction == 0)    //停机{PORTBbits.PB0 = 0;PORTBbits.PB1 = 0;}}if(pwmdcycle == 20){pwmduty1s = pwmduty1;  //必须保证周期结束才能更改此值pwmduty2s = pwmduty2;  //必须保证周期结束才能更改此值PORTBbits.PB1 = 0;PORTBbits.PB0 = 0;pwmdcycle = 0;seccount ++;}INTFbits.T1IF = 0;}
}void main(void)
{DISI();peripinit();ENI();while(1){//PB2 正转 if(PORTBbits.PB4 == 0){if(sw1flg == 0){tim1count = seccount + 3000;tim1scount = seccount + 40;sw1flg = 1;}if((tim1count == seccount)&&(sw1flg == 2)){if(direction != 0)        //关机{direction = 0;}else {direction = 1;spstate = 1;}sw1flg = 3;}if((seccount ==  tim1scount)&&(sw1flg == 1)){sw1flg = 2;}}else{if(sw1flg == 2 )                //短按有效{if(direction == 1){direction = 2;}else if(direction == 2){direction = 1;}}tim1count = 0;tim1scount = 0;sw1flg = 0;}//PB3 if(PORTBbits.PB3 == 0){if(sw2flg == 0){tim2count = seccount + 3000;    //延时3stim2scount = seccount + 40 ;sw2flg = 1;}if((tim2count == seccount)&&(sw2flg == 2)){if(direction != 0)        //开机{direction = 0;}else {direction = 1;spstate = 1;}sw2flg = 3;}if((seccount ==  tim2scount)&&(sw2flg == 1)){sw2flg = 2;}}else{if(sw2flg == 2 ){if(direction == 1){direction = 2;}else if(direction == 2){direction = 1;}}tim2count = 0;tim2scount = 0;sw2flg = 0;}//PB5 加速换挡if(PORTBbits.PB5 == 0){if(sw3flg == 0){tim3count = seccount + 30;sw3flg = 1;}if((tim3count == seccount)&&(sw3flg == 1)){spstate ++;if(spstate == 11){spstate = 1;}sw3flg = 2;}}else{tim3count = 0;sw3flg = 0;}//CLRWDT(); //pb4/pb5_加减速if(spstate == 1){pwmduty1 = 10;}else if(spstate == 2){pwmduty1 = 9;}else if(spstate == 3){pwmduty1 = 8;}else if(spstate == 4){pwmduty1 = 7;}else if(spstate == 5){pwmduty1 = 6;}else if(spstate == 6){pwmduty1 = 5;}else if(spstate == 7){pwmduty1 = 4;}else if(spstate == 8){pwmduty1 = 3;}else if(spstate == 9){pwmduty1 = 2;}else if(spstate == 10){pwmduty1 = 1;}}
}

单片机控制马达驱动IC的应用相关推荐

  1. FS9170马达驱动IC全新原装L9170 L9170SSOP8贴片5A18V马达驱动芯片

    泛海微FS9170 是一款 DC 双向马达驱动电路,耐压15V,它适用于玩具等类的电机驱动.自动阀门电机驱动.电磁门锁驱动等.它有两个逻辑输入端子用来控制电机前进.后退及制动.该电路具有良好的抗干扰性 ...

  2. VCM(音圈)马达驱动IC

    VCM(音圈)马达驱动IC 参考链接:https://jingyan.baidu.com/article/f3ad7d0f3e935409c2345b5b.html 1 2 3 4 5 6 分步阅读 ...

  3. 单片机控制74hc595驱动4个单数码管计数显示

    单片机控制74hc595驱动4个单数码管静态显示 演示效果: *材料 AT89C52 .74HC595共阳数码管 采用Proteus仿真 实例程序 #include<reg51.h> #d ...

  4. LC117A泛海微马达驱动IC SOP-8

    马达驱动IC LC117A SOP-8 电动玩具直流驱动 电机驱动芯片 马达驱动IC LC117A的产品描述: LC117A是为专门为低电压下工作的系统而设计的单通道玩具直流电机驱动集成电路.它具有H ...

  5. TC118S/TC118H单通道直流马达驱动IC

    TC118S/TC118H特点: 单通道内置功率MOS 全桥 驱动驱动前进.后退.停止及刹车功能 内置迟滞热效应过热保护功能 低导通电阻(1.6Ω) 最大连续输出电流可达1.8A,峰值 2.5A 无需 ...

  6. L9110 L9110S SOP8 马达驱动 IC 芯片 H桥全桥 贴片

    一.L9110S 概述 L9110S是一块直流电机驱动电路,该产品为电池供电的玩具.低压或电池供电的控制应用提供了一种集成直流马达驱动的解决方案.电路内部集成了采用MOS管设计的H桥驱动电路,主要应用 ...

  7. FS9170马达驱动IC

    FS9170 是一款 DC 双向马达驱动电路,耐压15V,它适用于玩具等类的电机驱动.自动阀门电机驱动.电磁门锁驱动等.它有两个逻辑输入端子用来控制电机前进.后退及制动.该电路具有良好的抗干扰性,微小 ...

  8. TC118S单通道内置MOS单通道直流无刷马达驱动IC

    一. 特点 TC118S 单通道内置功率 MOS 全桥驱动 웖 驱动前进.后退.停止及刹车功能 웖 内置迟滞热效应过热保护功能 웖 低导通电阻(1.6Ω) 웖 最大连续输出电流可达 1.8A,峰值 2 ...

  9. 基于51单片机的PWM控制马达电机调速正反转(仿真+源码+全套资料)

    资料编号:117 仿真图proteus 7.8 程序编译器:keil 5 编程语言:C语言 采用51单片机,用PWM控制电机脉冲频率应控制在25HZ-35HZ之间 定时1ms,1个周期30ms,脉冲频 ...

最新文章

  1. Google创始人公开信:AI暖春和黑暗面
  2. yum报错Error: Cannot retrieve repository metadata (repomd.xml) for repository: rhel-source
  3. 修改aconda镜像服务器,Jupyter安装链接aconda的实现方法
  4. [译文]Domain Driven Design Reference(五)—— 为战略设计的上下文映
  5. 关于泊松过程的参数估计
  6. JavaScript学习(七十七)—统计字符串中出现次数最多的字符和每个字符出现的次数
  7. 《Hack与HHVM权威指南》——1.1 为什么使用类型检查器
  8. 强大的代码编辑工具:Nova for mac v7.3中文版
  9. Ubuntu20.04安装Redis
  10. 阿里云ACP云计算认证有用吗?
  11. OpenCV——证件照自动抠图
  12. 不知道免费去水印图片软件哪个好?来看看这3个软件
  13. ESP32基于arduino开发的心跳体温检测系统(一)项目介绍及准备
  14. 安装分区助手,总是显示“分区助手已安装到你的电脑中,怎么办
  15. 【完全解析】Lumion 9.0 新功能与改进
  16. MIT-6.s081-CodeWalk-fs.cfile.csysfile.c
  17. 第五章语言模型:n-gram
  18. PVE+集客AC+K2T-AP
  19. BugKu:WEB——gam1
  20. A Comprehensive Real-World Dataset for Unsupervised Anomaly Detection(翻译)

热门文章

  1. 苏珊米勒 10月占星运势
  2. 错题本——数据库系统工程师 2012
  3. int型与double型
  4. 一台服务器虚拟交换机,产品技术-H3C S1010V虚拟交换机-新华三集团-H3C
  5. 三种公钥密码体系(传统公开密钥体系 / 基于身份的公开密钥体系 / 基于无证书的公开密钥体系 )
  6. 王道计算机考研408计算机组成原理汇总(下)
  7. 〖Python WEB 自动化测试实战篇⑩〗- 实战 - UI自动化脚本设计常见场景剖析
  8. RocketMQ 消息消费 轮询机制 PullRequestHoldService
  9. ARM64下构建 UEFI 模块
  10. 2018CCCC天梯赛整理