直流电机的变速转动及正反转

今天尝试了小车里面的直流电机部分,尝试了用pwm控制的变速转动及用改变IO口电平的正反转。
在控制变速转动中,拿之前的呼吸灯来做成功了。main.c中主函数如下:
int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval–;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
TIM_SetCompare1(TIM1,led0pwmval);
}
}
经过相应的定义和初始化之后,TIM1_PWM_Init(899,0);按我的理解通俗来说这句话可以控制一个循环周期的时长。“899”代表了arr的值,会决定周期时长;而“0”即psc的值会决定是否时钟预分频。
led0pwmval的值即直接控制了PWM的占空比。另外在这个实验中在配置 AFIO 相关寄存器的时候,必须先开启辅助功能时钟。 (之前两天的当中有什么情况需要用的IO的复位(AFIO))。
在while循环里面,先消抖,而后led0pwmval 即PWM 比较值,通过他的改变控制PWM的占空比。在每一个循环中,因为led0pwmval值的不同,灯的亮度会发生改变,同样的电机的转速也会发生改变。
另外在改变PWM的占空比的时候,改变值“300”,会发现当改变值超过300后,灯的亮度的改变将看不出来,只有时间的变化。是灯的原因与程序无关。
在直流电机的正反转当中,开始直接想的是在上一个转速上面直接改变IO口电平的状态来改变电机两个引脚的高低,达到正反转的目的,结果没能实现。具体原因还不知道。
然后单独尝试直流电机的正反转,即通过配置高低电平来实现控制电机的正反转。具体程序参照“https://blog.csdn.net/teavamc/article/details/77429519
自己在开始写这个的时候遇到的问题是不知道怎么来表示,原理很简单,
#define IN1(a) if (a) \ GPIO_SetBits(GPIOA,GPIO_Pin_2);\else \ GPIO_ResetBits(GPIOA,GPIO_Pin_2) 但像这样的宏定义自己之前没有想到,在这句话中要注意:1,这句话最后不需要;来结尾;2,\代表的是连接前后两句话。

发布了14 篇原创文章 · 获赞 7 · 访问量 3522

猜你喜欢

转载自blog.csdn.net/qq_45186557/article/details/97301670