完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这次做电子设计竞赛题目,运动悬挂系统。。本实验是控制两个步进电机通过一个定滑轮用线挂一个重物,并使这个重物走直线。。
首先对定时器进行配置。 void TIM_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_DeInit(TIM3); TIM_TimeBaseStructure.TIM_Period = 8; //中断时间为 T = ( TIM_Period + 1 )*( TIM_Prescaler + 1 )/TIMxCLK(72MHZ) = 10(-6) s TIM_TimeBaseStructure.TIM_Prescaler = 7; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); TIM_ClearFlag( TIM3, TIM_FLAG_Update); TIM_ITConfig( TIM3, TIM_IT_Update, ENABLE); } 然后写画直线的函数,思路如下,将起点和终点的坐标作为函数的传递参数。通过计算起点和终点到两个滑轮之间的距离差可以算出两个电机在这段时间转过的距离。。因为时间是相同的,所以令两个电机的速度比等于通过计算得到的距离比即可。。具体代码如下: void Draw_Line(float x1, float y1, float x2, float y2) { float L1, L2; //起始点到滑轮距离之差 float sulv; //两个电机转速比 L1 = sqrt((x1 + 15)*(x1 + 15) + (115 - y1)*(115 - y1)) - sqrt((x2 + 15)*(x2 + 15) + (115 - y2)*(115 - y2)); L2 = sqrt((95 - x1)*(95 - x1) + (115 - y1)*(115 - y1)) - sqrt((95 - x2)*(95 - x2) + (115 - y2)*(115 - y2)); if(L1>0) //控制电机正反转 GPIO_SetBits(GPIOA,GPIO_Pin_6); else GPIO_ResetBits(GPIOA,GPIO_Pin_6); if(L2>0) GPIO_SetBits(GPIOA,GPIO_Pin_7); else GPIO_ResetBits(GPIOA,GPIO_Pin_7); L1 = fabs(L1); L2 = fabs(L2); countL = L1/0.0006; //计算出走完L1、L2所需脉冲数,,0.0006是通过几组数据计算出来的。。 countR = L2/0.0006; sulv = countL*170.0 /countR; suduL = sulv; suduR = 170; //算出两个电机发生电平翻转产生脉冲的时间比 count = 0; countLR =0; TIM_Cmd(TIM3, ENABLE); //定时器开始计时 } 中断服务程序中的内容是定时器到达两个电机规定的发生电平翻转的时间的倍数是翻转电平,产生脉冲驱动电机运动。 void TIM3_IRQHandler(void) { if((countLR == (countL*2))) TIM_Cmd(TIM3, DISABLE); //两个电机运动完成,,关定时器 count++; //开始计时 if( !(count % suduR) ) { if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_4)==0) GPIO_SetBits(GPIOA,GPIO_Pin_4); else GPIO_ResetBits(GPIOA,GPIO_Pin_4); countLR++; //记录电平翻转次数,即脉冲数的一半 } if( !(count % suduL) ) { if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5)==0) GPIO_SetBits(GPIOA,GPIO_Pin_5); else GPIO_ResetBits(GPIOA,GPIO_Pin_5); } /*防止定时器溢出*/ if(count == suduL*suduR) { count=0; } TIM_ClearFlag(TIM3, TIM_FLAG_Update); //一定不要忘记清除中断位 } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1535 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1484 浏览 1 评论
905 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
651 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1530 浏览 2 评论
1841浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
590浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
491浏览 3评论
492浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
472浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 05:17 , Processed in 0.768594 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号