1.步進電機在3D打印上用的比較多,因爲步長是固定的,因此能夠精準的控制轉動產生的位移
(DC 5V 4相8拍5線步進電機 28YBJ-48 / 驅動芯片型號:uln2003芯片)
2.驅動原理
3.驅動時序
3.1 4相8拍
3.2 4相單4拍
3.3 4相雙4拍
4.參考代碼(4相8拍,使用52840芯片驅動,使用P0.13、P0.14、P0.15、P0.16)
uint32_t control_IO[8] = {0x2000, 0x6000, 0x4000, 0xC000, 0x8000, 0x18000, 0x10000, 0x12000}; //順時針旋轉
4.1 控制步進電機正反轉
static void demo1(void) {
NRF_LOG_INFO("Demo 1 循環5次正反轉後停止");
uint16_t i,j;
NRF_P0->OUT = 0x00;
count=0;
while (1) {
for (i = 0; i < 512; i++) {
for (j = 0; j < 8; j++) {//輸出一個脈衝
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(1);
}
}
NRF_P0->OUT = 0x00;
nrf_delay_ms(500);
for (i = 0; i < 512; i++) {
for (j = 7; j > 0; j--) {
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(1);
}
}
NRF_P0->OUT = 0x00;
nrf_delay_ms(500);
if(++count == 5)
{
break;
}
}
}
4.2 控制電機減速旋轉
static void demo2(void)
{
NRF_LOG_INFO("Demo 2/減速旋轉5次後停止");
uint16_t i,j;
uint16_t speed = 1;
NRF_P0->OUT = 0x00;
count=0;
while (1) {
for (i = 0; i < 512; i++) {
for (j = 0; j < 8; j++) {//輸出一個脈衝
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(speed);
}
}
NRF_P0->OUT = 0x00;
if(speed < 3)
{
speed++;
nrf_delay_ms(500);
}
else
{
speed = 1;
}
if(++count == 5)
{
break;
}
}
}
4.3控制電機加速旋轉
static void demo3(void)
{
NRF_LOG_INFO("Demo 3/加速旋轉5次後停止");
uint16_t i,j;
uint16_t speed = 3;
NRF_P0->OUT = 0x00;
count=0;
while (1) {
for (i = 0; i < 512; i++) {
for (j = 0; j < 8; j++) {//輸出一個脈衝
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(speed);
}
}
NRF_P0->OUT = 0x00;
if(speed > 0)
{
speed--;
nrf_delay_ms(500);
}
else
{
speed = 3;
}
if(++count == 5)
{
break;
}
}
}
4.4 逆時針旋轉90°
static void demo4(void)
{
NRF_LOG_INFO("Demo 4/逆時針旋轉90°");
uint16_t i,j;
NRF_P0->OUT = 0x00;
count=0;
while (1) {
for (i = 0; i < 128; i++) {
for (j = 7; j > 0; j--) {//輸出一個脈衝
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(1);
}
}
NRF_P0->OUT = 0x00;
nrf_delay_ms(500);
if(++count == 5)
{
break;
}
}
}
4.5 逆時針旋轉180度
static void demo5(void)
{
NRF_LOG_INFO("Demo 5/逆時針旋轉 180度");
uint16_t i,j;
NRF_P0->OUT = 0x00;
count=0;
while (1) {
for (i = 0; i < 256; i++) {
for (j = 7; j > 0; j--) {//輸出一個脈衝
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(1);
}
}
NRF_P0->OUT = 0x00;
nrf_delay_ms(500);
if(++count == 5)
{
break;
}
}
}
旋轉角度A與脈衝數B的關係
A = (5.625°/64)*B
若A等於360°,那麼需要4096個脈衝