设计名称:DIY 电子显微镜用移动滑台
图片:
滑台网上买的几块钱,不知道是做啥产品用的
系统结构:
1,PYthon上位机程序
2,rs232通信
3,开发板程序包括:电机驱动程序,串口数据解码程序,按键程序,板载示例程序
作品简介:
GD32控制板,控制两个步进电机驱动器,控制板与上位机之间通信是232接口,驱动步进电机采用双4拍控制,上位机界面用python写成,这样在看电脑屏幕上图像的时候可以直接点击按钮来调整位置。
视频链接地址:https://training.eeworld.com.cn/video/20637。
电机驱动代码:
void left_move(uint32_t s_hz )
{
for(k=0;k<4;k++)
{
switch(k)
{
case 0:
gd_eval_motor1_on(MOTOR1A);
gd_eval_motor1_off(MOTOR1B);
gd_eval_motor1_off(MOTOR1C);
gd_eval_motor1_on(MOTOR1D);
break;
case 1:
gd_eval_motor1_on(MOTOR1A);
gd_eval_motor1_on(MOTOR1B);
gd_eval_motor1_off(MOTOR1C);
gd_eval_motor1_off(MOTOR1D);
break;
case 2:
gd_eval_motor1_off(MOTOR1A);
gd_eval_motor1_on(MOTOR1B);
gd_eval_motor1_on(MOTOR1C);
gd_eval_motor1_off(MOTOR1D);
break;
default:
gd_eval_motor1_off(MOTOR1A);
gd_eval_motor1_off(MOTOR1B);
gd_eval_motor1_on(MOTOR1C);
gd_eval_motor1_on(MOTOR1D);
break;
}
plus_delay(s_hz );
}
}
/*!
\brief right_move function,右移双四拍控制
\param[in] s_hz 频率
\param[out] none
\retval none
*/
void right_move(uint32_t s_hz )
{
for(k=0;k<4;k++)
{
switch(k)
{
case 0:
gd_eval_motor1_off(MOTOR1A);
gd_eval_motor1_off(MOTOR1B);
gd_eval_motor1_on(MOTOR1C);
gd_eval_motor1_on(MOTOR1D);
break;
case 1:
gd_eval_motor1_off(MOTOR1A);
gd_eval_motor1_on(MOTOR1B);
gd_eval_motor1_on(MOTOR1C);
gd_eval_motor1_off(MOTOR1D);
break;
case 2:
gd_eval_motor1_on(MOTOR1A);
gd_eval_motor1_on(MOTOR1B);
gd_eval_motor1_off(MOTOR1C);
gd_eval_motor1_off(MOTOR1D);
break;
default:
gd_eval_motor1_on(MOTOR1A);
gd_eval_motor1_off(MOTOR1B);
gd_eval_motor1_off(MOTOR1C);
gd_eval_motor1_on(MOTOR1D);
break;
}
plus_delay(s_hz );
}
}
/*!
\brief front_move function 向前移动,双四拍控制
\param[in] 频率
\param[out] none
\retval none
*/
void front_move(uint32_t s_hz )
{
for(k=0;k<4;k++)
{
switch(k)
{
case 0:
gd_eval_motor2_on(MOTOR2A);
gd_eval_motor2_off(MOTOR2B);
gd_eval_motor2_off(MOTOR2C);
gd_eval_motor2_on(MOTOR2D);
break;
case 1:
gd_eval_motor2_on(MOTOR2A);
gd_eval_motor2_on(MOTOR2B);
gd_eval_motor2_off(MOTOR2C);
gd_eval_motor2_off(MOTOR2D);
break;
case 2:
gd_eval_motor2_off(MOTOR2A);
gd_eval_motor2_on(MOTOR2B);
gd_eval_motor2_on(MOTOR2C);
gd_eval_motor2_off(MOTOR2D);
break;
default:
gd_eval_motor2_off(MOTOR2A);
gd_eval_motor2_off(MOTOR2B);
gd_eval_motor2_on(MOTOR2C);
gd_eval_motor2_on(MOTOR2D);
break;
}
plus_delay(s_hz );
}
}
/*!
\brief back_move function 向后移动双四拍控制
\param[in] 频率
\param[out] none
\retval none
*/
void back_move(uint32_t s_hz )
{
for(k=0;k<4;k++)
{
switch(k)
{
case 0:
gd_eval_motor2_off(MOTOR2A);
gd_eval_motor2_off(MOTOR2B);
gd_eval_motor2_on(MOTOR2C);
gd_eval_motor2_on(MOTOR2D);
break;
case 1:
gd_eval_motor2_off(MOTOR2A);
gd_eval_motor2_on(MOTOR2B);
gd_eval_motor2_on(MOTOR2C);
gd_eval_motor2_off(MOTOR2D);
break;
case 2:
gd_eval_motor2_on(MOTOR2A);
gd_eval_motor2_on(MOTOR2B);
gd_eval_motor2_off(MOTOR2C);
gd_eval_motor2_off(MOTOR2D);
break;
default:
gd_eval_motor2_on(MOTOR2A);
gd_eval_motor2_off(MOTOR2B);
gd_eval_motor2_off(MOTOR2C);
gd_eval_motor2_on(MOTOR2D);
break;
}
plus_delay(s_hz );
}
}
/*!
\brief 频率延时 function
\param[in] none
\param[out] none
\retval none
*/
void plus_delay(uint32_t s_hz )
{
uint32_t bs_hz ;
bs_hz=s_hz ;
if (bs_hz>1000)
{bs_hz=1000;}
if(bs_hz<=1)
{bs_hz=1;}
bs_hz=1000/bs_hz;
delay_1ms(bs_hz);
}
通信解码代码:
void decode_usart()
{
switch(usart_num)
{
case 0x67://主机发送数字1,前进
code_num=1;
gd_eval_led_on(LED1);
break;
case 0x33:
code_num=2; //主机发送数字2后退
gd_eval_led_on(LED2);
break;
case 0x66:
code_num=3;//主机发送数字3左移
break;
case 0x19:
code_num=4;//主机发送数字4右移
break;
case 0x65:
code_num=5;//主机发送数字5停止
break;
default:
code_num=5;//主机发送数字5停止
gd_eval_led_off(LED1);
gd_eval_led_off(LED2);
break;
}
通信初始化化代码用的是开发板示例程序中的
附件
1、源码
2、作品word文档
3、演示视频
|