找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1979|回复: 0
打印 上一主题 下一主题
收起左侧

直流电机的变速转动及正反转单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:590981 发表于 2019-8-1 19:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天尝试了小车里面的直流电机部分,尝试了用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,\代表的是连接前后两句话。
---------------------
作者:天甄
来源:CSDN

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表