1i7

Убить chipKIT за 60 секунд

Nov 08, 2012 15:22

(или как вариант - "Один сломал, второй потерял")

Сегодня утром помогал вести небольшую практическую лабу на автомобильном факультете по мотивам летней школы - оживить 2хмоторную машинку при помощи драйвера-усилителя L294D и платы chipKIT Uno32 в режиме Arduino.

Все просто - подключить провода к плате и моторам по схеме, дальше в нужной последовательности подавать нули и единицы на 4 ножки платы, чтобы крутить колеса в разные стороны.




Нарисовал на доске схему драйвера типа такой:




Студенты все подключили, покрутили для пробы одним мотором - нормально работает.

Дальше говорю - напишите самостоятельно программу типа, чтобы машинка ехала секунду вперед, потом секунду разворачивалась и ехала дальше и т.п. по кругу (разворот бортовым способом, т.е. крутить одновременно два мотора в разные стороны, т.е. опять же подавать нули и единицы в нужной комбинации).

Что-то написали, загрузили на плату - вроде не работает. Ну ерунда - включить-выключить моторчик с паузой - сейчас разберемся. Пока открывал код, кто-то заметил, что чип на плате разогрелся так, что обжигает палец. После отключения платы от USB быстро остывает, но при включении опять разогревается за 5 секунд. Новая версия прошивки из MPIDE больше не заливается - среда что-то пытается делать, но ждать, что произойдет быстрее - среда зальет прошивку или чип расплавит плату, - не очень хочется. Для чистоты эксперимента взяли вторую плату, провода (к моторам, драйверу и т.п) подключать вообще не стали - просто залили прошивку как есть через USB - та же история - чип греется за 5 секунд, новая прошивка не заливается.

Вот собственно весь код:

void setup() {               
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
}

void loop() {
  digitalWrite(6, HIGH); 
  delay(1000);         
  digitalWrite(6, LOW);
  delay(1000);   
  digitalWrite(7, LOW); 
  delay(1000);             
  digitalWrite(7, HIGH); 
  delay(1000);
  digitalWrite(8, HIGH); 
  delay(1000);             
  digitalWrite(8, LOW); 
  delay(1000);
  digitalWrite(9, LOW); 
  delay(1000);             
  digitalWrite(9, HIGH); 
  delay(1000);
  digitalWrite(8, HIGH); 
  delay(3000);             
  digitalWrite(8, LOW); 
  delay(3000);
  digitalWrite(9, LOW); 
  delay(3000);             
  digitalWrite(9, HIGH); 
  delay(3000);
  digitalWrite(6, LOW); 
  delay(3000);             
  digitalWrite(6, HIGH); 
  delay(3000);   
  digitalWrite(7, HIGH); 
  delay(3000);             
  digitalWrite(7, LOW); 
  delay(3000);
}

Чем он принципиально отличается от примера с мигающей по бесконечному циклу лампочкой пока не врубился. Третью плату убивать не стали - только проверили, что бесконечная лампочка на одном пине чип так не греет.

летняя школа, arduino, microchip, mips

Previous post Next post
Up