<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Art-Pi+TMC2209步進電機細分控制測試

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

1.背景

前幾天找出個步進電機,用L298N驅動測試了一下,具體見上篇文章簡單的步進電機驅動調試。但是L298N無法實現細分控制,在低速轉動時,聲音比較大,且振動厲害,因此想著嘗試一下細分控制效果。于是花十二塊大洋某寶購買了一塊T“MC2209步進電機超靜音驅動模塊”來測試一下。

2.硬件及連接

2.1硬件

ART-Pi、TMC2209模塊、DC12V電源。

2.2接口連接

TMC2009模塊的接口連接如下:

1.jpg

3.原理介紹

3.1 TMC2209模塊介紹

TMC2209是TRIAMINIC推出的一款步進電機驅動模塊。驅動模塊靜音且高精度,可以實現高達1/256步細分控制,實現更平滑靜音的步進電機控制。模塊內嵌12.5 MHz的內部振蕩器,簡單串行數據傳輸的UART。性價比較高的步進電機驅動模塊。

3.2 TMC2209規格

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

3.3 TMC2209針腳定義

1.jpg

3.4 微步細分配置

1)硬件細分配置

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

1.jpg

2)軟件細分配置

如果想實現更高的細分控制,則需要通過USART口進行配置,具體如下:

(測試中,測試完完善進來)

4.程序代碼

4.1 TMC2209初始化

//硬件微步設置
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設置

這里采用了PWM(ART-Pi默認的PWM5通道1)來輸出脈沖信號控制步進電機的轉動速度,下面是使用函數:

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;
/
設置PWM周期和脈沖寬度默認值 /
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
/
使能設備 */
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
return 0;
}

4.3 定時器配置

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

#define HWTIMER_DEV_NAME "timer13" /* 定時器名稱 /
/
定時器超時回調函數 /
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; /
定時器模式 /
rt_uint32_t freq = 1000000; /
計數頻率 /
/
查找定時器設備 /
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;
}
/
以讀寫方式打開設備 /
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;
}
/
設置超時回調函數 /
rt_device_set_rx_indicate(hw_dev, timeout_cb);
/
設置計數頻率(若未設置該項,默認為1Mhz 或 支持的最小計數頻率) /
rt_device_control(hw_dev, HWTIMER_CTRL_FREQ_SET, &freq);
/
設置模式為周期性定時器(若未設置,默認是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 步進電機控制

這里采用了兩種方式來輸出脈沖及數量,一種是通過延時和翻轉DIR管腳電平實現,一種是通過定時器和PWM來實現。

/*
dir:電機轉動方向,0 正轉;1 反轉
speed:電機轉動速度:0-300r/min,注意不同的電機最高轉速不一樣
angle:電機轉動角度:°
/
void turn_control(rt_uint8_t dir, rt_uint16_t speed, float_t angle)
{
rt_uint32_t pulse_num = 0;//脈沖數量
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);
//設置電機轉動方向
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);//設置PWM頻率并輸出
hwtimer_start(timeout_value);//設置定時時間并啟動定時器
/
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控制臺

這里把電機控制加入MSH指令,可以通過控制臺來手動實現電機任意控制測試:

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.總結

電機的轉動確實非常安靜,完全聽不到聲音,在低速控制時轉動也比較平滑,完全感受不到振動。性價比不錯,有需要做步進電機控制的小伙伴可以參考使用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 振蕩器
    +關注

    關注

    28

    文章

    3575

    瀏覽量

    137837
  • 步進電機
    +關注

    關注

    149

    文章

    2968

    瀏覽量

    146369
  • L298N驅動
    +關注

    關注

    0

    文章

    2

    瀏覽量

    727
  • TMC2209
    +關注

    關注

    1

    文章

    5

    瀏覽量

    5837
  • ART-Pi
    +關注

    關注

    0

    文章

    23

    瀏覽量

    1229
收藏 人收藏

    評論

    相關推薦

    淺析TMC5160步進電機驅動芯片開發

    接近伺服的效果。我們的應用對運動的平穩和靜音要求很高,86步進電機直驅直徑40-50mm的轉盤,要求運行的平滑,以及盤上的芯片盒不會震動產生噪音,原先采用富士伺服系統控制效果很好,只是最近...
    發表于 09-09 07:51

    TMC4210步進電機控制器具有哪些特性?

    TMC4210步進電機控制器具有哪些特性?
    發表于 10-12 12:10

    關于TMC5160步進電機驅動芯片的知識點,不看肯定后悔

    關于TMC5160步進電機驅動芯片的知識點,不看肯定后悔
    發表于 11-02 06:59

    如何去實現TMC5160步進電機的簡單轉動呢

    TMC5160步進電機有哪幾種模式呢?如何去實現TMC5160步進電機的簡單轉動呢?
    發表于 12-20 07:48

    如何實現TMC260/TMC2660/TMC262步進電機驅動?

    spi配置參數有哪些?如何實現TMC260/TMC2660/TMC262步進電機驅動?
    發表于 12-21 07:32

    TMC2208/2209的特性是什么

    描述這是一個四層板的TMC2208/TMC2209步進電機驅動,用于3D打印機或寫字機。TMC2208/
    發表于 02-16 07:34

    如何利用STM32實現TMC5160步進電機簡單轉動?

    TMC5160具有哪幾種工作模式?如何利用STM32實現TMC5160步進電機簡單轉動?
    發表于 02-28 09:07

    基于Trinamic TMC2209步進電機驅動板

    描述這是一款基于 Trinamic TMC2209步進電機驅動板。 - 與 BotStep 兼容的引腳排列。 - 從 SilentStepStick 鏡像的引腳排列。 - Vref 由主板
    發表于 08-11 07:28

    ADI Trinamic新品重磅來襲| TMC2240高性能電機驅動芯片=TMC2209TMC2130完全升級版

    。TMC2130與業界標準的16細分相比,可提供高達256細分,從而提供極其平穩、精密的運動控制,實現高精度定位和最小諧振,同時具有最高
    發表于 10-15 11:53

    在RT-Thread系統中使用TMC5160步進電機驅動

    我參加了ART-Pi擴展板設計的活動,做了一個TMC5160步進電機驅動的擴展板,并PR了一個TMC5160驅動的庫,簡要介紹一下這個庫的使
    發表于 10-24 16:34

    如何使用TMC5160步進電機驅動芯片開發筆記-1

    控制器(六點斜坡加減速/梯形加減速)支持microPlyer?微插值功能的的步進/方向接口電壓范圍 8…60V 直流SPI 和單線 UART 編碼器接口和 2個參考開關輸入最高256 微
    發表于 02-04 17:59

    STM32控制TMC5160步進電機控制驅動芯片代碼

    STM32控制TMC5160步進電機控制驅動芯片的代碼
    發表于 09-22 07:31

    四層板TMC2208/TMC2209步進電機驅動

    描述這是一個四層板的TMC2208/TMC2209步進電機驅動,用于3D打印機或寫字機。TMC2208/
    發表于 12-17 18:19 ?48次下載
    四層板<b class='flag-5'>TMC</b>2208/<b class='flag-5'>TMC2209</b><b class='flag-5'>步進</b><b class='flag-5'>電機</b>驅動

    基于Trinamic TMC2209步進電機驅動板

    電子發燒友網站提供《基于Trinamic TMC2209步進電機驅動板.zip》資料免費下載
    發表于 08-24 09:47 ?23次下載
    基于Trinamic <b class='flag-5'>TMC2209</b>的<b class='flag-5'>步進</b><b class='flag-5'>電機</b>驅動板

    關于TMC2209步進電機驅動模塊–SilentStepStick的知識概況

    2 相雙極步進電機。最重要的是,TMC2209 提供了一個簡單的 UART接口,可以在任何具有 UART端口的微控制器的幫助下進行調整和控制
    發表于 05-16 14:45 ?11次下載
    關于<b class='flag-5'>TMC2209</b><b class='flag-5'>步進</b><b class='flag-5'>電機</b>驅動模塊–SilentStepStick的知識概況
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>