完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
首先,我们要明白:电机转动的实质其实是对PWM波的控制输出;
( 库函数直接调用封装好的函数 TIM_SetCompare1()或者用CCR调节占空比) PWM波输出的原理图如下: 其次,我用到了L298N型号的电机驱动,于是我通过淘宝的拍立淘或者是百度进行了电机的初步了解 下面我从网上找到了一个L298N电机驱动实物图,进行详细的描述:(通过此图可以进行实物连接) 注:千万小心,不要把引脚接反了,会少了芯片。 然后,进行代码的编写,可以引用正点原子的例程代码,在此基础上进行代码的编写。 我小车是直接控制两个电机,四个电机分成两组。让其中一侧电机的状态相同,另一个状态相同,,没有分别单独控制。 通过下图可以参考:IN1 IN2 IN3 IN4 1 0 1 0 实现电机的正转 小车前进 0 1 0 1 实现电机的反转 小车后退 1 0 0 1 小车右转 0 1 1 0 小车左转 但所有的前提是要先学会时钟实验和GPIO的初始化,这个时候就要补上上次STM32学习的内容了。 先进行STM32时钟和GPIO的学习 附上电机初始化代码 void Motor_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB,ENABLE); //使能GPIOA和GPIOB GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6 |GPIO_Pin_7 ; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStruct); GPIO_ResetBits(GPIOA,GPIO_Pin_6 |GPIO_Pin_7); //引脚先输出高电平 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 |GPIO_Pin_1 ; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStruct); GPIO_ResetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1); //引脚输出高电平 //引脚输出高电平 之后,还需要自己写函数实现小车的前进,后退,左转和右转 需要注意的是PWM时钟输出的arr和psc的关系: 系统时钟设置为72MHz; PWMFre=Sys/(arr+1)(psc+1) TIM1_PWM_Init(999,71);//分频。PWM频率=72000/(999+1)*(71+1)=1Khz 周期为:1/1khz; |
|
|
|
只有小组成员才能发言,加入小组>>
2303 浏览 0 评论
8344 浏览 4 评论
36079 浏览 18 评论
4926 浏览 0 评论
23710 浏览 34 评论
1157浏览 2评论
1395浏览 1评论
1727浏览 1评论
1232浏览 0评论
1671浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 06:28 , Processed in 1.115824 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号