你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
fangqiu9717

fangqiu9717

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
4 回答

肯请大师提供比较完整的步进电机(直流电机)C语言代码

未设置标签
请叫我小阳 请叫我小阳 回答时间: 2019-4-22 17:22

写的很菜,用的STD库,但是稍微改一下就能用 /*这是步进电机驱动程序,本程序使用STM8S003F3系列单片机的 【GPIOC】外设 * 需要占用的GPIO管脚分别是:GPIOC 3~6 * 步进电机逆时针旋转,八拍方式驱动,线序为:A、AB、B、BC、C、CD、D、DA * 步进电机步脚距7.5/85度,减速比1/85 */ #include "moto_driver.h" unsigned int steps = 0;//定义变量:总部步数 void moto_timer_init(void)//使用定时器4, {     CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4,ENABLE);//使能TIMER4外设时钟         TIM4_DeInit();//恢复TIME4寄存器默认值     TIM4_TimeBaseInit(TIM4_PRESCALER_128,80);//设置预分频数128,,计数器初值256,256/(16M/8/128)= 60.1hz     TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);//向上溢出中断,中断函数向量号为25     TIM4_SetCounter(0x00);//     TIM4_ARRPreloadConfig(ENABLE);     TIM4_Cmd(DISABLE);     //TIM4_Cmd(ENABLE);//使能TIME4,参数ENABLE、DISABLE     //enableInterrupts();//使能中断总开关 } void moto_pin_init(void)//电机驱动IO初始化,开漏输出C3\PC4\PC5\PC6 {     GPIO_DeInit(GPIOC);     GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_SLOW);     GPIO_Init(GPIOC,GPIO_PIN_4,GPIO_MODE_OUT_PP_HIGH_SLOW);     GPIO_Init(GPIOC,GPIO_PIN_5,GPIO_MODE_OUT_PP_HIGH_SLOW);     GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_OUT_PP_HIGH_SLOW); } void steps_0(void)//步进0:1000 {     GPIO_WriteHigh(GPIOC,GPIO_PIN_3);     GPIO_WriteLow(GPIOC,GPIO_PIN_4);     GPIO_WriteLow(GPIOC,GPIO_PIN_5);     GPIO_WriteLow(GPIOC,GPIO_PIN_6); } void steps_1(void)//步进1:1100 {     GPIO_WriteHigh(GPIOC,GPIO_PIN_3);     GPIO_WriteHigh(GPIOC,GPIO_PIN_4);     GPIO_WriteLow(GPIOC,GPIO_PIN_5);     GPIO_WriteLow(GPIOC,GPIO_PIN_6); } void steps_2(void)//步进2:0100 {     GPIO_WriteLow(GPIOC,GPIO_PIN_3);     GPIO_WriteHigh(GPIOC,GPIO_PIN_4);     GPIO_WriteLow(GPIOC,GPIO_PIN_5);     GPIO_WriteLow(GPIOC,GPIO_PIN_6); } void steps_3(void)//步进3:0110 {     GPIO_WriteLow(GPIOC,GPIO_PIN_3);     GPIO_WriteHigh(GPIOC,GPIO_PIN_4);     GPIO_WriteHigh(GPIOC,GPIO_PIN_5);     GPIO_WriteLow(GPIOC,GPIO_PIN_6); } void steps_4(void)//步进4:0010 {     GPIO_WriteLow(GPIOC,GPIO_PIN_3);     GPIO_WriteLow(GPIOC,GPIO_PIN_4);     GPIO_WriteHigh(GPIOC,GPIO_PIN_5);     GPIO_WriteLow(GPIOC,GPIO_PIN_6); } void steps_5(void)//步进5:0011 {     GPIO_WriteLow(GPIOC,GPIO_PIN_3);     GPIO_WriteLow(GPIOC,GPIO_PIN_4);     GPIO_WriteHigh(GPIOC,GPIO_PIN_5);     GPIO_WriteHigh(GPIOC,GPIO_PIN_6); } void steps_6(void)//步进6:0001 {     GPIO_WriteLow(GPIOC,GPIO_PIN_3);     GPIO_WriteLow(GPIOC,GPIO_PIN_4);     GPIO_WriteLow(GPIOC,GPIO_PIN_5);     GPIO_WriteHigh(GPIOC,GPIO_PIN_6); } void steps_7(void)//步进7:1001 {     GPIO_WriteHigh(GPIOC,GPIO_PIN_3);     GPIO_WriteLow(GPIOC,GPIO_PIN_4);     GPIO_WriteLow(GPIOC,GPIO_PIN_5);     GPIO_WriteHigh(GPIOC,GPIO_PIN_6); } void moto_off(void)//刹车停止电机运转函数 {     TIM4_Cmd(DISABLE);//关闭定时器     TIM4_SetCounter(0x00);//清零定时器计数值     GPIO_WriteHigh(GPIOC,GPIO_PIN_3);//刹车堵转     GPIO_WriteHigh(GPIOC,GPIO_PIN_4);     GPIO_WriteHigh(GPIOC,GPIO_PIN_5);     GPIO_WriteHigh(GPIOC,GPIO_PIN_6); } void moto_on(void)//启动电机运转函数 {     TIM4_SetCounter(0x00);//清零定时器计数值     TIM4_Cmd(ENABLE);//开启定时器 } void moto_run(char steps_)//电机单步运转函数,传入总步数 {   switch(steps_ % 8)//单步细分   {       case 0:steps_0();break;       case 1:steps_1();break;       case 2:steps_2();break;       case 3:steps_3();break;       case 4:steps_4();break;       case 5:steps_5();break;       case 6:steps_6();break;       case 7:steps_7();break;   } } void moto_init(void) {   steps = 0;   moto_pin_init();   moto_timer_init(); }  复制代码

赞0
fangqiu9717 fangqiu9717


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16