完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
这次电子设计竞赛题目,运动悬挂系统。。本实验是控制两个步进电机通过一个定滑轮用线挂一个重物,并使这个重物走直线。。
首先对定时器进行配置。 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遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 19:35 , Processed in 0.609950 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号