|
Контролер для 3-х двигателей. |
|
|
|
Jul 2 2017, 08:31
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Мне нужно сделать драйвер для 3-х двигателей. Двигатели обычные DC Motors 24V. Двигатели имеют энкодеры для отслеживания позиции. Хотелось чтоб энкодеры были апаратные. Обычно это делается на таймерах. Вот задумался какой контроллер выбрать. PWM+Encoders требуют таймера. К тому же на мои нужды нужно еще 3 таймера. У ST вроде нет контролеров заточенных под motion. У TI есть но что то не хочется связываться с TI. К тому же 3 двигателя. Есть контроллеры под такую задачу? Основная проблема - аппаратно обработать 3 энкодера. На атмеловских AVRках я пользовался внешними интераптами но это, как мне кажется, не очень хороший способ.
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jul 3 2017, 20:04
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(Jenya7 @ Jul 2 2017, 11:31)  Мне нужно сделать драйвер для 3-х двигателей. Двигатели обычные DC Motors 24V. Двигатели имеют энкодеры для отслеживания позиции. Хотелось чтоб энкодеры были апаратные. Обычно это делается на таймерах. Вот задумался какой контроллер выбрать. PWM+Encoders требуют таймера. К тому же на мои нужды нужно еще 3 таймера. У ST вроде нет контролеров заточенных под motion. У TI есть но что то не хочется связываться с TI. К тому же 3 двигателя. Есть контроллеры под такую задачу? Основная проблема - аппаратно обработать 3 энкодера. На атмеловских AVRках я пользовался внешними интераптами но это, как мне кажется, не очень хороший способ. так не проще сделать это на плис программируемый PWM Код library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;
entity pwm_prog is generic( N : integer := 8); -- number of bit of PWM counter port ( i_clk : in std_logic; i_rstb : in std_logic; i_sync_reset : in std_logic; i_pwm_module : in std_logic_vector(N-1 downto 0); -- PWM Freq = clock freq/ (i_pwm_module+1); max value = 2^N-1 i_pwm_width : in std_logic_vector(N-1 downto 0); -- PWM width = (others=>0)=> OFF; i_pwm_module => MAX ON o_pwm : out std_logic); end pwm_prog;
architecture rtl of pwm_prog is
signal r_max_count : unsigned(N-1 downto 0); signal r_pwm_counter : unsigned(N-1 downto 0); signal r_pwm_width : unsigned(N-1 downto 0); signal w_tc_pwm_counter : std_logic;
begin
w_tc_pwm_counter <= '0' when(r_pwm_counter<r_max_count) else '1'; -- use to strobe new word --------------------------------------------------------------------
p_state_out : process(i_clk,i_rstb) begin if(i_rstb='0') then r_max_count <= (others=>'0'); r_pwm_width <= (others=>'0'); r_pwm_counter <= (others=>'0'); o_pwm <= '0'; elsif(rising_edge(i_clk)) then r_max_count <= unsigned(i_pwm_module); if(i_sync_reset='1') then r_pwm_width <= unsigned(i_pwm_width); r_pwm_counter <= to_unsigned(0,N); o_pwm <= '0'; else if(r_pwm_counter=0) and (r_pwm_width/=r_max_count) then o_pwm <= '0'; elsif(r_pwm_counter<=r_pwm_width) then o_pwm <= '1'; else o_pwm <= '0'; end if; if(w_tc_pwm_counter='1') then r_pwm_width <= unsigned(i_pwm_width); end if; if(r_pwm_counter=r_max_count) then r_pwm_counter <= to_unsigned(0,N); else r_pwm_counter <= r_pwm_counter + 1; end if; end if; end if; end process p_state_out;
end rtl; квадратурный декодер например (по ссылке можно купить для "тренировки") (реализация учитывает направление вращения): Код library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.NUMERIC_STD.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity QuadratureDecoder is Port ( QuadA : in STD_LOGIC; QuadB : in STD_LOGIC; Clk : in STD_LOGIC; Position : out STD_LOGIC_VECTOR (7 downto 0)); end QuadratureDecoder; architecture Behavioral of QuadratureDecoder is signal QuadA_Delayed: unsigned(2 downto 0) := "000"; signal QuadB_Delayed: unsigned(2 downto 0) := "000"; signal Count_Enable: STD_LOGIC; signal Count_Direction: STD_LOGIC; signal Count: unsigned(7 downto 0) := "00000000"; begin process (Clk) begin if Clk='1' and Clk'event then QuadA_Delayed <= (QuadA_Delayed(1), QuadA_Delayed(0), QuadA); QuadB_Delayed <= (QuadB_Delayed(1), QuadB_Delayed(0), QuadB); if Count_Enable='1' then if Count_Direction='1' then Count <= Count + 1; Position <= conv_std_logic_vector(Count, 8); else Count <= Count - 1; Position <= conv_std_logic_vector(Count, 8); end if; end if; end if; end process; Count_Enable <= QuadA_Delayed(1) xor QuadA_Delayed(2) xor QuadB_Delayed(1) xor QuadB_Delayed(2); Count_Direction <= QuadA_Delayed(1) xor QuadB_Delayed(2); end Behavioral; или энкодер в плис это обычный счетчик импульсов... Далее добавляем двупортовую память в которую будем писать данные для выполнения и конфигурирования PWM В первый порт пишем принятые данные по UART (вы писали), я предлагаю SPI (не требуется синхронизации приемника и передатчика)С второго порта читаем данные и выдаем на PWM - результат контролируем с помощью квадратурного декодера (в реализации обычный компаратор) Вместо двупортовой памяти можно взять двуклоковое фифо Как в плис сделать из одного модуля три думаю догадаетесь  Если хотите внешний MCU то предлагаю сделать соединение с ПЛИС с помощью external memory interfacе, т.е чтобы MCU видело ПЛИС как свою память ОЗУ + пару пинов для организации обмена прерываниями(окончанием работы(выполнения команды и др)) тогда в ПЛИС делаете двойной буфер и будет отличное решение Возможно не понадобится делать протокол обмена (парсер как Вы это назвали) Как то так...
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
Сообщений в этой теме
Jenya7 Контролер для 3-х двигателей. Jul 2 2017, 08:31 sigmaN У ST есть всё для моторов и даже библиотека имеетс... Jul 2 2017, 15:19 AlexandrY Цитата(sigmaN @ Jul 2 2017, 18:19) У ST е... Jul 2 2017, 15:54 oleg_d У семейства XMC4000 есть все что надо но только дл... Jul 2 2017, 15:55 Jenya7 Цитата(sigmaN @ Jul 2 2017, 20:19) У ST е... Jul 2 2017, 16:33 sigmaN Кстати по ходу у ТСа коллекторные движки и там всё... Jul 2 2017, 15:56 AlexandrY Цитата(sigmaN @ Jul 2 2017, 18:56) Кстати... Jul 2 2017, 16:01 sigmaN Я щас тоже только что так подумал ) Jul 2 2017, 16:02 EmbedElektrik параметры энкодера и частота вращения какие? при 1... Jul 2 2017, 20:47 Jenya7 Цитата(EmbedElektrik @ Jul 3 2017, 01:47)... Jul 3 2017, 05:46 Эдди Цитата(EmbedElektrik @ Jul 2 2017, 23:47)... Jul 3 2017, 11:12 sigmaN Ну так надо сначала ж выбрать энкодеры исходя из т... Jul 3 2017, 09:04 Jenya7 Цитата(sigmaN @ Jul 3 2017, 14:04) Ну так... Jul 3 2017, 09:43  HardEgor Цитата(Jenya7 @ Jul 3 2017, 16:43) А проб... Jul 3 2017, 17:11   Эдди Цитата(HardEgor @ Jul 3 2017, 20:11) Возм... Jul 3 2017, 22:21    Maverick Цитата(Эдди @ Jul 4 2017, 01:21) Вот это,... Jul 3 2017, 22:43     Огурцов Цитата(Maverick @ Jul 3 2017, 23:43) заче... Jul 4 2017, 02:01     HardEgor Цитата(Maverick @ Jul 4 2017, 05:43) Возм... Jul 4 2017, 05:00     Эдди Цитата(Maverick @ Jul 4 2017, 01:43) Возм... Jul 4 2017, 05:17 jcxz Цитата(sigmaN @ Jul 3 2017, 12:04) А ведь... Jul 4 2017, 10:40 sigmaN Проблема в том, что ваша система не должна допусти... Jul 3 2017, 10:24 sigmaN Цитатаи вопрос "определить текущую скорость в... Jul 3 2017, 13:14 Jenya7 Цитата(Maverick @ Jul 4 2017, 02:04) так ... Jul 4 2017, 06:38 khach Для надежности как раз и применяют два STM32 - оди... Jul 4 2017, 07:19 sigmaN ЦитатаА нужно-ли принимать решение на каждом импул... Jul 4 2017, 15:05 jcxz Цитата(sigmaN @ Jul 4 2017, 18:05) Ну учи... Jul 4 2017, 15:11 sigmaN ЦитатаБольшое кол-во импульсов - это только для ув... Jul 4 2017, 15:54 jcxz Цитата(sigmaN @ Jul 4 2017, 18:54) Правил... Jul 4 2017, 16:40 khach Энкодер с аппаратным таймером считает все импульсы... Jul 4 2017, 17:45 sigmaN Ну если счётчик аппаратный тогда ОК Jul 4 2017, 20:00 Jenya7 Решил вернутся к теме. То есть как решил - жизнь з... Oct 27 2017, 08:41 HardEgor Цитата(Jenya7 @ Oct 27 2017, 15:41) Я бы ... Oct 27 2017, 12:09  Jenya7 Цитата(HardEgor @ Oct 27 2017, 17:09) Стр... Oct 27 2017, 12:13 khach Цитата(Jenya7 @ Oct 27 2017, 10:41) Я бы ... Oct 28 2017, 12:16  Jenya7 спасибо. посмотрю. Oct 29 2017, 06:32 Огурцов Цитата(Jenya7 @ Oct 27 2017, 09:41) Но се... Oct 29 2017, 08:31  khach Цитата(Огурцов @ Oct 29 2017, 10:31) эта,... Oct 29 2017, 09:35   Огурцов Цитата(khach @ Oct 29 2017, 10:35) На мик... Oct 29 2017, 12:24    khach Цитата(Огурцов @ Oct 29 2017, 14:24) а тр... Oct 29 2017, 12:55     Огурцов Цитата(khach @ Oct 29 2017, 12:55) условн... Oct 29 2017, 14:14      khach Цитата(Огурцов @ Oct 29 2017, 16:14) обыч... Oct 29 2017, 14:36 mantech Цитата(Jenya7 @ Jul 2 2017, 11:31) Мне ну... Oct 29 2017, 08:07 Jenya7 Прихожу к мысли, что нужно делать модуль контроль+... Oct 29 2017, 10:04 mantech Цитата(Jenya7 @ Oct 29 2017, 13:04) Прихо... Oct 29 2017, 11:08 Jenya7 Вот решение близко к идеальному. https://geektim... Oct 29 2017, 12:25 gosha-z Цитата(Jenya7 @ Oct 29 2017, 15:25) Вот р... Oct 29 2017, 14:40 AlexandrY Цитата(Jenya7 @ Oct 29 2017, 14:25) Вот р... Oct 29 2017, 14:58  khach Цитата(AlexandrY @ Oct 29 2017, 16:58) В ... Oct 29 2017, 15:35   Огурцов Цитата(khach @ Oct 29 2017, 16:35) canope... Oct 29 2017, 16:37    khach Цитата(Огурцов @ Oct 29 2017, 18:37) вам ... Oct 29 2017, 17:04     Огурцов Цитата(khach @ Oct 29 2017, 18:04) Вообще... Oct 30 2017, 00:20      khach Цитата(Огурцов @ Oct 30 2017, 02:20) can ... Oct 30 2017, 10:53       jcxz Цитата(khach @ Oct 30 2017, 13:53) Контро... Oct 30 2017, 11:33       mantech Цитата(khach @ Oct 30 2017, 13:53) Эзерне... Oct 30 2017, 11:38        jcxz Цитата(mantech @ Oct 30 2017, 14:35) чтоб... Oct 30 2017, 11:41         khach Цитата(jcxz @ Oct 30 2017, 13:41) У меня ... Oct 30 2017, 12:02          jcxz Цитата(khach @ Oct 30 2017, 15:02) Ну у н... Oct 30 2017, 12:18           khach Цитата(jcxz @ Oct 30 2017, 14:18) Ну это ... Oct 30 2017, 12:34            jcxz Цитата(khach @ Oct 30 2017, 15:34) Интерс... Oct 30 2017, 12:46           AlexandrY Цитата(jcxz @ Oct 30 2017, 14:18) Прерыва... Oct 30 2017, 13:24            jcxz Цитата(AlexandrY @ Oct 30 2017, 16:24) А ... Oct 30 2017, 13:38             mantech Цитата(jcxz @ Oct 30 2017, 16:38) А что -... Oct 30 2017, 14:31       Огурцов Цитата(khach @ Oct 30 2017, 11:53) Контро... Oct 30 2017, 12:22   AlexandrY Цитата(khach @ Oct 29 2017, 17:35) Это хо... Oct 29 2017, 18:29  Jenya7 Цитата(AlexandrY @ Oct 29 2017, 19:58) Хо... Oct 30 2017, 07:11   AlexandrY Цитата(Jenya7 @ Oct 30 2017, 09:11) а где... Oct 30 2017, 07:34    Jenya7 Цитата(AlexandrY @ Oct 30 2017, 12:34) От... Oct 30 2017, 07:43     AlexandrY Цитата(Jenya7 @ Oct 30 2017, 09:43) да. с... Oct 30 2017, 08:51      Jenya7 Цитата(AlexandrY @ Oct 30 2017, 13:51) Пе... Oct 30 2017, 09:22       AlexandrY Цитата(Jenya7 @ Oct 30 2017, 11:22) понял... Oct 30 2017, 09:33        Jenya7 Цитата(AlexandrY @ Oct 30 2017, 14:33) Бе... Oct 30 2017, 09:38         AlexandrY Цитата(Jenya7 @ Oct 30 2017, 11:38) я пон... Oct 30 2017, 10:07          Jenya7 Цитата(AlexandrY @ Oct 30 2017, 15:07) Ес... Oct 30 2017, 10:40 Dog Pawlowa 5 страниц, задача не озвучена.
Управление мотором:... Oct 30 2017, 16:20 Jenya7 Нашел вот такое чудо.
http://www.allegromicro.com/... Nov 15 2017, 08:22 Tanya Цитата(Jenya7 @ Nov 15 2017, 11:22) Это ж... Nov 15 2017, 08:29 AlexandrY Цитата(Jenya7 @ Nov 15 2017, 10:22) Нашел... Nov 15 2017, 09:52  Jenya7 Цитата(AlexandrY @ Nov 15 2017, 15:52) Он... Nov 15 2017, 10:02   AlexandrY Цитата(Jenya7 @ Nov 15 2017, 11:56) А есл... Nov 15 2017, 10:07    Jenya7 Цитата(AlexandrY @ Nov 15 2017, 16:07) То... Nov 15 2017, 10:10     AlexandrY Цитата(Jenya7 @ Nov 15 2017, 12:10) там т... Nov 15 2017, 10:20      Jenya7 Цитата(AlexandrY @ Nov 15 2017, 16:20) Да... Nov 15 2017, 10:37       AlexandrY Цитата(Jenya7 @ Nov 15 2017, 12:37) так м... Nov 15 2017, 10:46        Jenya7 Цитата(AlexandrY @ Nov 15 2017, 16:46) А ... Nov 15 2017, 11:00         AlexandrY Цитата(Jenya7 @ Nov 15 2017, 13:00) ну во... Nov 15 2017, 11:05          Jenya7 Цитата(AlexandrY @ Nov 15 2017, 17:05) TA... Nov 15 2017, 11:14           AlexandrY Цитата(Jenya7 @ Nov 15 2017, 13:14) а как... Nov 15 2017, 12:08            Jenya7 Цитата(AlexandrY @ Nov 15 2017, 18:08) Си... Nov 15 2017, 12:22   mantech Цитата(Jenya7 @ Nov 15 2017, 13:02) Не по... Nov 15 2017, 13:12    Jenya7 Цитата(mantech @ Nov 15 2017, 19:12) В че... Nov 15 2017, 13:27     mantech Цитата(Jenya7 @ Nov 15 2017, 16:27) боязн... Nov 15 2017, 19:01 Aner QUOTE (Jenya7 @ Nov 15 2017, 12:22) Нашел... Nov 15 2017, 09:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|