衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Art-Pi+TMC2209步進(jìn)電機(jī)細(xì)分控制測(cè)試

冬至子 ? 來源:小小李sunny ? 作者:小小李sunny ? 2023-12-11 16:00 ? 次閱讀

1.背景

前幾天找出個(gè)步進(jìn)電機(jī),用L298N驅(qū)動(dòng)測(cè)試了一下,具體見上篇文章簡(jiǎn)單的步進(jìn)電機(jī)驅(qū)動(dòng)調(diào)試。但是L298N無法實(shí)現(xiàn)細(xì)分控制,在低速轉(zhuǎn)動(dòng)時(shí),聲音比較大,且振動(dòng)厲害,因此想著嘗試一下細(xì)分控制效果。于是花十二塊大洋某寶購(gòu)買了一塊T“MC2209步進(jìn)電機(jī)超靜音驅(qū)動(dòng)模塊”來測(cè)試一下。

2.硬件及連接

2.1硬件

ART-Pi、TMC2209模塊、DC12V電源

2.2接口連接

TMC2009模塊的接口連接如下:

1.jpg

3.原理介紹

3.1 TMC2209模塊介紹

TMC2209是TRIAMINIC推出的一款步進(jìn)電機(jī)驅(qū)動(dòng)模塊。驅(qū)動(dòng)模塊靜音且高精度,可以實(shí)現(xiàn)高達(dá)1/256步細(xì)分控制,實(shí)現(xiàn)更平滑靜音的步進(jìn)電機(jī)控制。模塊內(nèi)嵌12.5 MHz的內(nèi)部振蕩器,簡(jiǎn)單串行數(shù)據(jù)傳輸?shù)?a href="http://www.zgszdi.cn/tags/uart/" target="_blank">UART。性價(jià)比較高的步進(jìn)電機(jī)驅(qū)動(dòng)模塊。

3.2 TMC2209規(guī)格

工作電壓:5.5 – 38V
最大內(nèi)部時(shí)鐘頻率:12.5 MHz
每相最大電流:2 A
峰值輸出電流:2.8A
邏輯工作電壓:3/5V

3.3 TMC2209針腳定義

1.jpg

3.4 微步細(xì)分配置

1)硬件細(xì)分配置

TMC2209模塊提供了硬件微步配置,通過MS1和MS2可以實(shí)現(xiàn)1/8、1/16、1/32、1/64的細(xì)分控制,具體如下:

1.jpg

2)軟件細(xì)分配置

如果想實(shí)現(xiàn)更高的細(xì)分控制,則需要通過USART口進(jìn)行配置,具體如下:

(測(cè)試中,測(cè)試完完善進(jìn)來)

4.程序代碼

4.1 TMC2209初始化

//硬件微步設(shè)置
void micro_step_set(rt_uint8_t step)
{
switch (step) {
case 8:
rt_pin_write(MS1_PIN, PIN_LOW);
rt_pin_write(MS2_PIN, PIN_LOW);
break;
case 16:
rt_pin_write(MS1_PIN, PIN_HIGH);
rt_pin_write(MS2_PIN, PIN_HIGH);
break;
case 32:
rt_pin_write(MS1_PIN, PIN_HIGH);
rt_pin_write(MS2_PIN, PIN_LOW);
break;
case 64:
rt_pin_write(MS1_PIN, PIN_LOW);
rt_pin_write(MS2_PIN, PIN_HIGH);
break;
default:
break;
}
}
static int tmc2209_init(void)
{
rt_pin_mode(EN_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(MS1_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(MS2_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(STEP_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(DIR_PIN, PIN_MODE_OUTPUT);
rt_pin_write(EN_PIN, PIN_LOW);
micro_step_set(MICRO_STEP);
hwtimer_init();
return 0;
}
INIT_APP_EXPORT(tmc2209_init);

4.2 PWM設(shè)置

這里采用了PWM(ART-Pi默認(rèn)的PWM5通道1)來輸出脈沖信號(hào)控制步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)速度,下面是使用函數(shù):

int pwm_set(rt_uint16_t fre, rt_uint8_t duty_cycle)
{
rt_uint32_t period = 0;
rt_uint32_t pulse = 0;
pwm_dev = (struct rt_device_pwm )rt_device_find(PWM_DEV_NAME);
if (pwm_dev == RT_NULL)
{
rt_kprintf("pwm sample run failed! can't find %s device!n", PWM_DEV_NAME);
return RT_ERROR;
}
period = 1000000000 / fre;
pulse = period * duty_cycle / 100;
/
設(shè)置PWM周期和脈沖寬度默認(rèn)值 /
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
/
使能設(shè)備 */
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
return 0;
}

4.3 定時(shí)器配置

這里采用硬件定時(shí)器(ART-Pi默認(rèn)TIM13,PS:settings雖然可以直接配置,但是cubemx默認(rèn)沒配置TIM13,所以直接使用還是不行,需要cubemx配置后才能使用)來控制PWM輸出指定的脈沖數(shù)量,通過計(jì)算步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的角度所需要的脈沖個(gè)數(shù),以及轉(zhuǎn)動(dòng)速度計(jì)算的脈沖時(shí)間,計(jì)算出定時(shí)器的計(jì)時(shí)時(shí)間,超時(shí)后停止PWM輸出,并禁止TMC2209(不禁止的話電機(jī)會(huì)發(fā)熱)。

#define HWTIMER_DEV_NAME "timer13" /* 定時(shí)器名稱 /
/
定時(shí)器超時(shí)回調(diào)函數(shù) /
static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size)
{
rt_pwm_disable(pwm_dev, PWM_DEV_CHANNEL);//停止PWM輸出
rt_pin_write(EN_PIN, PIN_HIGH);//禁止TMC2209
return 0;
}
int hwtimer_init(void)
{
rt_err_t ret = RT_EOK;
rt_hwtimer_mode_t mode; /
定時(shí)器模式 /
rt_uint32_t freq = 1000000; /
計(jì)數(shù)頻率 /
/
查找定時(shí)器設(shè)備 /
hw_dev = rt_device_find(HWTIMER_DEV_NAME);
if (hw_dev == RT_NULL)
{
rt_kprintf("hwtimer sample run failed! can't find %s device!n", HWTIMER_DEV_NAME);
return RT_ERROR;
}
/
以讀寫方式打開設(shè)備 /
ret = rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR);
if (ret != RT_EOK)
{
rt_kprintf("open %s device failed!n", HWTIMER_DEV_NAME);
return ret;
}
/
設(shè)置超時(shí)回調(diào)函數(shù) /
rt_device_set_rx_indicate(hw_dev, timeout_cb);
/
設(shè)置計(jì)數(shù)頻率(若未設(shè)置該項(xiàng),默認(rèn)為1Mhz 或 支持的最小計(jì)數(shù)頻率) /
rt_device_control(hw_dev, HWTIMER_CTRL_FREQ_SET, &freq);
/
設(shè)置模式為周期性定時(shí)器(若未設(shè)置,默認(rèn)是HWTIMER_MODE_ONESHOT)*/
mode = HWTIMER_MODE_ONESHOT;
ret = rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode);
if (ret != RT_EOK)
{
rt_kprintf("set mode failed! ret is :%dn", ret);
return ret;
}
return ret;
}
int hwtimer_start(rt_hwtimerval_t timeout)
{
if (rt_device_write(hw_dev, 0, &timeout, sizeof(timeout)) != sizeof(timeout))
{
rt_kprintf("set timeout value failedn");
return RT_ERROR;
}
return RT_EOK;
}

4.4 步進(jìn)電機(jī)控制

這里采用了兩種方式來輸出脈沖及數(shù)量,一種是通過延時(shí)和翻轉(zhuǎn)DIR管腳電平實(shí)現(xiàn),一種是通過定時(shí)器和PWM來實(shí)現(xiàn)。

/*
dir:電機(jī)轉(zhuǎn)動(dòng)方向,0 正轉(zhuǎn);1 反轉(zhuǎn)
speed:電機(jī)轉(zhuǎn)動(dòng)速度:0-300r/min,注意不同的電機(jī)最高轉(zhuǎn)速不一樣
angle:電機(jī)轉(zhuǎn)動(dòng)角度:°
/
void turn_control(rt_uint8_t dir, rt_uint16_t speed, float_t angle)
{
rt_uint32_t pulse_num = 0;//脈沖數(shù)量
rt_uint16_t delay_time = 0;
rt_uint16_t pulse_fre = 0;//脈沖頻率
rt_hwtimerval_t timeout_value;
float_t temp = 0.0;
temp = (angle / (360.0 / 200.0 / MICRO_STEP));
float_t t = 1000000 / ((360.0 / (360.0 / 200.0 / MICRO_STEP)) / 60.0 * speed);
pulse_num = temp;
delay_time = t / 2;
pulse_fre = 1000000 / t;
timeout_value.sec = 0;
timeout_value.usec = t * pulse_num;
//rt_kprintf("%dn", pulse_num);
//rt_kprintf("%dn", delay_time);
//rt_kprintf("%dn", pulse_fre);
//rt_kprintf("%dn", timeout_value.usec);
rt_pin_write(EN_PIN, PIN_LOW);
//設(shè)置電機(jī)轉(zhuǎn)動(dòng)方向
if(dir == 0)
rt_pin_write(DIR_PIN, PIN_HIGH);
if(dir == 1)
rt_pin_write(DIR_PIN, PIN_LOW);
pwm_set(pulse_fre, 50);//設(shè)置PWM頻率并輸出
hwtimer_start(timeout_value);//設(shè)置定時(shí)時(shí)間并啟動(dòng)定時(shí)器
/
for (int i = 0; i < pulse_num; ++i) {
rt_pin_write(STEP_PIN, PIN_LOW);
//rt_thread_mdelay(speed);
rt_hw_us_delay(delay_time);
rt_pin_write(STEP_PIN, PIN_HIGH);
//rt_thread_mdelay(speed);
rt_hw_us_delay(delay_time);
}
rt_pin_write(EN_PIN, PIN_HIGH);*/
}

4.5 MSH控制臺(tái)

這里把電機(jī)控制加入MSH指令,可以通過控制臺(tái)來手動(dòng)實(shí)現(xiàn)電機(jī)任意控制測(cè)試:

static void step_motor_turn(int argc, char**argv)
{
if (argc < 3)
{
rt_kprintf("Please input'step_motor_turn direction speed angle'n");
return;
}
if (!rt_strcmp(argv[1], "forward"))
{
turn_control(0, atof(argv[2]), atof(argv[3]));
}
else if (!rt_strcmp(argv[1], "reverse"))
{
turn_control(1, atoi(argv[2]), atof(argv[3]));
}
else
{
rt_kprintf("Please input'step_motor_turn direction speed angle'n");
}
}
MSH_CMD_EXPORT(step_motor_turn, step_motor_turn );

5.總結(jié)

電機(jī)的轉(zhuǎn)動(dòng)確實(shí)非常安靜,完全聽不到聲音,在低速控制時(shí)轉(zhuǎn)動(dòng)也比較平滑,完全感受不到振動(dòng)。性價(jià)比不錯(cuò),有需要做步進(jìn)電機(jī)控制的小伙伴可以參考使用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 振蕩器
    +關(guān)注

    關(guān)注

    28

    文章

    3847

    瀏覽量

    139361
  • 步進(jìn)電機(jī)
    +關(guān)注

    關(guān)注

    151

    文章

    3120

    瀏覽量

    147841
  • L298N驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    773
  • TMC2209
    +關(guān)注

    關(guān)注

    1

    文章

    5

    瀏覽量

    6017
  • ART-Pi
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    1314
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TMC4210步進(jìn)電機(jī)控制器具有哪些特性?

    TMC4210步進(jìn)電機(jī)控制器具有哪些特性?
    發(fā)表于 10-12 12:10

    如何去實(shí)現(xiàn)TMC5160步進(jìn)電機(jī)的簡(jiǎn)單轉(zhuǎn)動(dòng)呢

    TMC5160步進(jìn)電機(jī)有哪幾種模式呢?如何去實(shí)現(xiàn)TMC5160步進(jìn)電機(jī)的簡(jiǎn)單轉(zhuǎn)動(dòng)呢?
    發(fā)表于 12-20 07:48

    如何實(shí)現(xiàn)TMC260/TMC2660/TMC262步進(jìn)電機(jī)驅(qū)動(dòng)?

    spi配置參數(shù)有哪些?如何實(shí)現(xiàn)TMC260/TMC2660/TMC262步進(jìn)電機(jī)驅(qū)動(dòng)?
    發(fā)表于 12-21 07:32

    TMC2208/2209的特性是什么

    描述這是一個(gè)四層板的TMC2208/TMC2209步進(jìn)電機(jī)驅(qū)動(dòng),用于3D打印機(jī)或?qū)懽謾C(jī)。TMC2208/
    發(fā)表于 02-16 07:34

    基于Trinamic TMC2209步進(jìn)電機(jī)驅(qū)動(dòng)板

    描述這是一款基于 Trinamic TMC2209步進(jìn)電機(jī)驅(qū)動(dòng)板。 - 與 BotStep 兼容的引腳排列。 - 從 SilentStepStick 鏡像的引腳排列。 - Vref 由主板
    發(fā)表于 08-11 07:28

    ADI Trinamic新品重磅來襲| TMC2240高性能電機(jī)驅(qū)動(dòng)芯片=TMC2209TMC2130完全升級(jí)版

    TMC2130與業(yè)界標(biāo)準(zhǔn)的16細(xì)分相比,可提供高達(dá)256細(xì)分,從而提供極其平穩(wěn)、精密的運(yùn)動(dòng)控制,實(shí)現(xiàn)高精度定位和最小諧振,同時(shí)具有最高
    發(fā)表于 10-15 11:53

    在RT-Thread系統(tǒng)中使用TMC5160步進(jìn)電機(jī)驅(qū)動(dòng)

    我參加了ART-Pi擴(kuò)展板設(shè)計(jì)的活動(dòng),做了一個(gè)TMC5160步進(jìn)電機(jī)驅(qū)動(dòng)的擴(kuò)展板,并PR了一個(gè)TMC5160驅(qū)動(dòng)的庫(kù),簡(jiǎn)要介紹一下這個(gè)庫(kù)的使
    發(fā)表于 10-24 16:34

    STM32控制TMC5160步進(jìn)電機(jī)控制驅(qū)動(dòng)芯片代碼

    STM32控制TMC5160步進(jìn)電機(jī)控制驅(qū)動(dòng)芯片的代碼
    發(fā)表于 09-22 07:31

    使用STM32控制TMC5160步進(jìn)電機(jī)控制驅(qū)動(dòng)芯片的代碼和電路圖及工程文件

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用STM32控制TMC5160步進(jìn)電機(jī)控制驅(qū)動(dòng)芯片的代碼和電路圖及工程文件。
    發(fā)表于 10-08 08:00 ?631次下載
    使用STM32<b class='flag-5'>控制</b><b class='flag-5'>TMC</b>5160<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b><b class='flag-5'>控制</b>驅(qū)動(dòng)芯片的代碼和電路圖及工程文件

    四層板TMC2208/TMC2209步進(jìn)電機(jī)驅(qū)動(dòng)

    描述這是一個(gè)四層板的TMC2208/TMC2209步進(jìn)電機(jī)驅(qū)動(dòng),用于3D打印機(jī)或?qū)懽謾C(jī)。TMC2208/
    發(fā)表于 12-17 18:19 ?50次下載
    四層板<b class='flag-5'>TMC</b>2208/<b class='flag-5'>TMC2209</b><b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>驅(qū)動(dòng)

    TRINAMIC超靜音的TMC2209步進(jìn)驅(qū)動(dòng)器介紹

    TRINAMIC超靜音的TMC2209步進(jìn)驅(qū)動(dòng)器IC,也可作為SilentStepStick使用。用于高達(dá)2A RMS和29V的兩相步進(jìn)電機(jī)電機(jī)
    發(fā)表于 04-28 10:05 ?4938次閱讀
    TRINAMIC超靜音的<b class='flag-5'>TMC2209</b><b class='flag-5'>步進(jìn)</b>驅(qū)動(dòng)器介紹

    基于Trinamic TMC2209步進(jìn)電機(jī)驅(qū)動(dòng)板

    電子發(fā)燒友網(wǎng)站提供《基于Trinamic TMC2209步進(jìn)電機(jī)驅(qū)動(dòng)板.zip》資料免費(fèi)下載
    發(fā)表于 08-24 09:47 ?26次下載
    基于Trinamic <b class='flag-5'>TMC2209</b>的<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>驅(qū)動(dòng)板

    如何測(cè)試TB6600步進(jìn)電機(jī)驅(qū)動(dòng)器控制器和步進(jìn)電機(jī)

    電子發(fā)燒友網(wǎng)站提供《如何測(cè)試TB6600步進(jìn)電機(jī)驅(qū)動(dòng)器控制器和步進(jìn)電機(jī).zip》資料免費(fèi)下載
    發(fā)表于 12-06 15:51 ?7次下載
    如何<b class='flag-5'>測(cè)試</b>TB6600<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>驅(qū)動(dòng)器<b class='flag-5'>控制</b>器和<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>

    關(guān)于TMC2209步進(jìn)電機(jī)驅(qū)動(dòng)模塊–SilentStepStick的知識(shí)概況

    雙極步進(jìn)電機(jī)。最重要的是,TMC2209 提供了一個(gè)簡(jiǎn)單的 UART接口,可以在任何具有 UART端口的微控制器的幫助下進(jìn)行調(diào)整和控制
    發(fā)表于 05-16 14:45 ?15次下載
    關(guān)于<b class='flag-5'>TMC2209</b><b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>驅(qū)動(dòng)模塊–SilentStepStick的知識(shí)概況

    基于STM32F405RGT6的TMC2660步進(jìn)電機(jī)驅(qū)動(dòng)器,附帶原理圖+PCB

    驅(qū)動(dòng)電路主要包括以下部分,信號(hào)接口電路,邏輯控制電路,功率開關(guān)電路,保護(hù)電路。TMC2660是步進(jìn)電機(jī)驅(qū)動(dòng)芯片,集成了先進(jìn)的電流控制算法、微
    的頭像 發(fā)表于 12-14 19:24 ?685次閱讀
    基于STM32F405RGT6的<b class='flag-5'>TMC</b>2660<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>驅(qū)動(dòng)器,附帶原理圖+PCB
    百家乐官网稳赢投注| 大发888主页| 百家乐官网赌场代理| 北京太阳城医院怎么样| 太阳城百家乐官网看牌| 威尼斯人娱乐城平台| 百家乐官网翻天| 百家乐官网赌场国际| 新锦江百家乐娱乐场开户注册| 网络百家乐官网打揽| 飞七棋牌游戏下载| 哪个百家乐玩法平台信誉好| 噢门百家乐官网玩法| 大发888娱乐城好吗| 新濠百家乐官网娱乐场| 百家乐官网体育博彩| 网上百家乐群的微博| 免费百家乐官网追号工具| 网上百家乐官网哪里| 威尼斯人娱乐城易博| 百家乐官网那个娱乐城信誉好 | 百家乐游戏大小| 加州百家乐官网的玩法技巧和规则| 苍山县| 百家乐庄牌| 百家乐机器二手| 百家乐官网折叠桌| 大赢家即时比分| 成都百家乐的玩法技巧和规则| 免费百家乐官网过滤软件| 百家乐官网视频游戏金币| 网上棋牌游戏赚钱| 至尊百家乐娱乐场开户注册| 百家乐官网正负计算| 大世界百家乐官网娱乐城| 大发888sut8| 破解百家乐游戏机| 肯博百家乐官网的玩法技巧和规则 | 娱乐城开户送| 找真人百家乐的玩法技巧和规则| 百家乐官网澳门赌|