msp430f5529产生4路PWM波,改变占空比从而改变电机(直流减速电机)的速度。驱动电机必然会用到驱动模块,接下来就介绍一下驱动模块——L298N
L298N驱动
若要对直流电机进行PWM调速,需设置IN1和IN2,即确定电机的转动方向;然后对使能端输入PWM脉冲,相当于控制总开关闭合与断开的时间,只是这个时间是ms级,即可实现调速。注意当使能信号为0时,电机处于自由停止状态;当使能信号为1,且IN1 和IN2为00或11时,电机处于制动状态,阻止电机转动。如图可说明
msp430f5529输出pwm波
第一步:IO口复用
将PxSEL寄存器的指定位置1,然后设置其方向。将P1.2、P1.3、P1.4、P1.5复用为PWM并设置为输出口。
第二步:对定时器的相关寄存器进行设置
对定时器A的操作:
定时器时钟TACLK可以选择ACLK,SMCLK或者来自外部的TAxCLK,确定时钟源为1MHz的SMCL(Subsystem master clock 子系统主时钟),时钟源由TASSELx位来选择;选择的时钟源可以直接传到定时器,或通过IDx位设置进行2,4,8分频,选择的时钟源甚至可以通过IDEXx设置进行2, 3, 4, 5, 6, 7或者8分频,这里暂不分频。接下来就是打开增计数模式即选中MC_1,如图示。最后赋给Timer_A控制器 就可以了!有以下几种输出模式,可自行去判断是哪一种,最好用示波器验证就明白了。最后通过给TA0CCR0赋值确定PWM周期。
#include <msp430F5529.h>
#define p1_2 TA0CCR1 //占空比计数,用于控制占空比
#define p1_3 TA0CCR2
#define p1_4 TA0CCR3
#define p1_5 TA0CCR4 void initpwm(){P1DIR |=BIT2+BIT3+BIT4+BIT5; //配置P1.2,3,4,5口为输出口P4DIR |=BIT3;P4OUT |=BIT3;//配置输出口并输出高电平P1SEL |=BIT2+BIT3+BIT4+BIT5; //开启1.2,3,4,5口的io复用输出pwmunsigned const PWM=1500;//设置PWM周期参数TA0CCR0 =PWM; //设置PWM周期TA0CTL=TASSEL__SMCLK+MC_1; //设置定时器A0采用SMCLK时钟源和增计数模式,查看他们的定义就明白了TA0CCTL1 = OUTMOD_7; //设置TA0CCR1的PWM的输出模式为7模式TA0CCTL2 = OUTMOD_7;TA0CCTL3 = OUTMOD_7; TA0CCTL4 = OUTMOD_7; }int main(void){//关闭看门狗WDTCTL = WDTPW | WDTHOLD;initpwm();//可以同时输出4路PWMp1_2=1000; //占空比为1000/1500p1_3=0;p1_4=500;//占空比为500/1500p1_5=0; }
ENA使能端作为PWM输入,将P1.2口PWM波输出接入,P4.3和P1.3分别接在驱动IN1和IN2上,这样就可以实现PWM调速了。
最后再分享一些msp430f5529我觉得很有用的文件,相信你会用到的。很久没用msp430了,先搞32去喽。随机更新
更新一点个人收集的很有用的资源:
模块及外设、学习笔记
寄存器库及函数库,调用即可
链接:https://pan.baidu.com/s/1at1SiA1H6z7TF2jhgzEHRw
提取码:wk66