Перейти к содержанию

Микроконтроллеры. Начало


Рекомендуемые сообщения

Я такие пользовал 18В20 , на фото показалось в металлическом корпусе. Хорошие датчики , и току едят мало около 1 мА. 

Чем будет модуль управлять ... реле которое включает тены? 

Ссылка на комментарий
Поделиться на другие сайты

Пока ищу полупроводниковое реле более мощное. Пускатель может тоже сойдёт. В нём стоит реле на 220 вольт 10 ампер.

Ссылка на комментарий
Поделиться на другие сайты

@Лепило, перестань. Симисторы такую нагрузку коммутирут очень на ура. В своих домашних делах коммутровал утюг в ведре с водой , довольно маломощные  симисторы использовал. 2 киловатта, конечно с теплоотводом, но переваривают без проблем. Собираюсь симисторы использовать в своих поделках с духовкой , п/п реле дорого получается , кпд больше, но оно не нужно в крематории.

Изменено пользователем tehsvar
Пишите правильнее
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Обычно фен в ванну, а тут оказывается можно и утюг в ведро...  :rofl:  

Пробежался по магазинам. Есть тока простые воздушные тэны. Ещё в нете гляну. А в обще усё есть. Надо просто собрать и попробовать набрать эти 50-60 градусов и посмотреть на счётчик.

Спасибо.

Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...

Тепловентилятор на работу себе :crazy:  , программируемый - мягкий старт , мягкий стоп , сенсорное управление , счетчик съеденых кВт/ч , таймер включения (чтоб на ночь или выходные засыпал и просыпался перед моим приходом и подогревал кандейку)

 

post-1376-0-20278200-1413220261_thumb.jpg

  • Upvote 8
Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

@sed_alex, В АВР и STM8 разница большая , ну вобщем переключиться сложно будет ? Имею ввиду рабочие регистры ,срам , епром ит.д. все примерно также ? 

И у STM32  регистры все в том числе рабочие 32 бита ? 

В моем магазине только STM32.... наверное некчемно для любителя начинающего. 

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Разница то конечно большая, но переход не очень сложен.

Тем более что есть куча готовых библиотек.

Вот к примеру код моего сварочника (точечная сварка) под STM8

 

 

#include "stm8s.h"
#include "HD44780.h"
#include "delay.h"



#define TIM4_PERIOD  124 //#define TIM4_PERIOD  124
#define P4 GPIO_PIN_4
#define P5 GPIO_PIN_5
#define P6 GPIO_PIN_6

volatile bool timeON = FALSE; // Флаг запуска счета таймера и включения силы 
volatile u16 ten_ms = 0;  		// десятые при запуске счета TIM4
volatile u16 sec = 0 ;				// секунды при запуске счета TIM4
unsigned int res, ADC_result; // тестирование ADC 
 

void TIM4_Config(void);

int main(void) 
{ 
  u16 uPulse,uPeriod;
  bool flag =0, key_pr = 0;	// флаг состояния (где мы находимся в экранно заставке или в рабочем цикле)
	u8 pr = 0;	// счетчик приращения нажатия кнопки
	uint8_t EE_sec=0, EE_sten=0;
	int s_ten=0;						// десятые при установке значения кнопками
	int s_sec=0;						// секунды при установке значения кнопками
	CLK->CKDIVR = 0x00;			// конфигурация (внутренний генератор 16МГц, без делителя.
	//CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
	 
	TIM4_Config();	
	InitLcd(GPIOC, GPIO_PIN_3, GPIO_PIN_2, GPIO_PIN_HNIB);  // назначаем управление LCD на PORTC вывод данных PORTB
 
 //GPIO_Init(GPIOD,  GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);//назначаем кнопочки 
  
	GPIO_Init(GPIOA,  GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);//назначаем выход силы
 	
			LCD_LOCATE(1,1);
			Out("Spot Wel");
	    LCD_LOCATE(2,1);
			Out("der v1.0");			// Экранная заставка
		  Delay(900);
			
			s_sec = FLASH_ReadByte(0x004000); // адрес где хранятся в памяти секунды
			s_ten = FLASH_ReadByte(0x004001); // адрес где хранятся в памяти милисекунды	
			Delay(100);
			if (s_sec > 0 || s_ten >0) 
		  { 
		    flag=1;
    		LCD_LOCATE(1,1); Out("Set Time");
			  LCD_LOCATE(2,1);					 
				LCD_printf(":  %01d,%02d", s_sec,s_ten );Out("s"); 
		  }
			
			// ADC configuration
  ADC1_DeInit();
  ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_5, ADC1_PRESSEL_FCPU_D8,
  ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);
  ADC1_StartConversion();
	
	

  
	
  TIM2_DeInit();
  TIM2_TimeBaseInit(1, 5000);
	TIM2_OC3Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE,2500, TIM2_OCPOLARITY_LOW ); 
  TIM2_OC3PreloadConfig(ENABLE);
  TIM2_ARRPreloadConfig(ENABLE);
	TIM2_Cmd(ENABLE);
	
	
	
		
	while(1)								// начало основного цикла
    {
		
		
	//ADC_result = ADC1_GetConversionValue();
  
   ADC_result= ADC1_GetConversionValue()/2;
	 if  (ADC_result != res)
			{
			 res = ADC_result;
			 TIM2->CCR3H = (res*5 >> 8);
			 TIM2->CCR3L = (res*5);
		   TIM2_Cmd(ENABLE);
			}
	 
	      LCD_LOCATE(1,1); Out("ADC :   ");
			  LCD_LOCATE(2,1);					 
				LCD_printf("%03d,%03d", ADC_result, res );Out("  ");
				
			
				
				//Delay(500);
				
//	TIM1_OC3Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, 50, TIM1_OCPOLARITY_HIGH);
 // TIM1_OC3PreloadConfig(ENABLE);
 
//uPulse =(ADC1_GetConversionValue()/1024)*100; 
// ChangePulse_PWM(TIM1, 3)
 // TIM1->CCR3H = (u8)(uPulse >> 8);
 // TIM1->CCR3L = (u8)(uPulse);


		/*		
		// если таймер не запущен и нажата кнопка "+" (при зажатии кнопки бежит вперед)
		 	 if (timeON == FALSE && GPIO_ReadInputPin (GPIOD,P4)==0)    
			  {
					if (s_sec < 1) s_ten++;
					  else s_ten = s_ten+10;
						
					if (s_ten >= 100)
					 {  s_ten = 0; s_sec++; if (s_sec >= 10) s_sec=0;}
					 
					LCD_LOCATE(1,1); Out("Set Time");
			    LCD_LOCATE(2,1);					 
					LCD_printf(":  %01d,%02d", s_sec,s_ten ); Out("s");
				  flag=1;
			    Delay(70);
		    }
			// если таймер не запущен и нажата кнопка "-" (при зажатии кнопки бежин назад)
	     if (timeON == FALSE && GPIO_ReadInputPin (GPIOD,P5)==0)
			  {
				  if (s_sec ==0 && s_ten != 0 ) s_ten--;
					
					if (s_sec >= 1) s_ten = s_ten-10;
				  
					if (s_sec ==0 && s_ten == 0 ) {s_sec=9; s_ten=90;}
					
					if (s_ten < 0 && s_sec < 1 && s_sec !=0){ s_ten = 99;s_sec--; if (s_sec < 0) {s_sec=9;s_ten=90;}}
				  if (s_ten < 0 && s_sec >= 1)            { s_ten = 90;s_sec--;if (s_sec < 0) {s_sec=9;s_ten=90;}}
					
					LCD_LOCATE(1,1); Out("Set Time");
			    LCD_LOCATE(2,1);					
					LCD_printf(":  %01d,%02d", s_sec,s_ten);Out("s");
					flag=1;
					Delay(70);
				}
			// если таймер не запущен и нажата кнопка "Старт"
  		if (timeON == FALSE && GPIO_ReadInputPin (GPIOD,P6)==0 && (s_sec*100+s_ten) > (sec*100+ten_ms)&& key_pr==0)
					{
					 	flag=1; ten_ms=0; sec=0;timeON = TRUE; 
						LCD_LOCATE(1,1);Out("Welding ");
						
					}
			// при работе отображает оставшееся время сварки			
			if (timeON == TRUE && flag==1 && (s_sec*100+s_ten) >= (sec*100+ten_ms) ) 
			{ 	GPIO_WriteHigh(GPIOA,GPIO_PIN_3);  //Если таймер запущен - включаем силовую часть.
					LCD_LOCATE(2,1);
			    LCD_printf(":  %01d,%02d",((s_sec*100+s_ten)-(sec*100+ten_ms))/100
					,((s_sec*100+s_ten)-(sec*100+ten_ms))%100);Out("s");
		  } 
			// при достижении заданной величины счета - пишем что счет завершился и вырубаем таймер
			if (timeON == TRUE && flag==1 && (s_sec*100+s_ten) < (sec*100+ten_ms) ) 
			{ 
				GPIO_WriteLow(GPIOA,GPIO_PIN_3); //Досчитали до конца - вырубили силу
				flag=1; ten_ms=0; sec=0;timeON = FALSE;  // обнулили счетчики TIM4, сбросили флаги счета
				
				// сюда прописать запись параметров в EEPROM
				EE_sec = FLASH_ReadByte(0x004000); // адрес где хранятся в памяти секунды
				EE_sten = FLASH_ReadByte(0x004001); // адрес где хранятся в памяти милисекунды
				Delay (100);
				if (EE_sec!=s_sec || EE_sten != s_ten)
				{
					FLASH_DeInit();
					FLASH_Unlock(FLASH_MEMTYPE_DATA); //разблокировали EEPROM для записи
					FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
					//FLASH_EraseByte(0x004000);
					//FLASH_EraseByte(0x004001);
					FLASH_ProgramByte(0x004000, s_sec);
					FLASH_ProgramByte(0x004001, s_ten);
					FLASH_Lock(FLASH_MEMTYPE_DATA); // заблокировали после записи
			  }
				
				LCD_LOCATE(1,1); Out("Comleted");
			  LCD_LOCATE(2,1); Out("...     ");
				Delay(500); 
				LCD_LOCATE(1,1); Out("Set Time");
			  LCD_LOCATE(2,1);					 
				LCD_printf(":  %01d,%02d", s_sec,s_ten );Out("s"); 
		  }
		
		if(GPIO_ReadInputPin (GPIOD,P6)==0)  //Пока кнопка Старт не отпущена, повторного старта не будет.
		{
		 if (pr > 1) key_pr=1;
		 pr++;
		}
		else
		{
			if (key_pr==1) Delay(2);// после отпускания кнопки
			key_pr=0;pr=0;
			
		}
		*/		
		}
		
	
}  

void TIM4_Config(void)  // конфигурация тамера TIM4
{	
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);	/* Time base configuration *///TIM4_PRESCALER_128
  TIM4_ClearFlag(TIM4_FLAG_UPDATE); 									/* Clear TIM4 update flag */
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);							/* Enable update interrupt */
  TIM4_Cmd(ENABLE);																		/* Enable TIM4 */
  enableInterrupts();	
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{ 
  while (1)
  {
  }
}
#endif
 

Подключенные библиотеки:

stm8s.h - описывает порты регистры и т.д.
HD44780.h - библиотека дисплея (занимает 4 кб) около 100 строк кода, большинство из них знакогенератор), 
delay.h - библиотека таймера (10 строк кода) 

 

 

 

Причем если обратите внимание на код - я наделал там кучу ошибок,  тем не менее после компилятора получил рабочий код.

К примере если вам нужно считать состояние вывода незачем это делать вот так:

if (GPIO_ReadInputPin (GPIOD,P5)==0) .......

Правильно будет вот так:

if  (!GPIO_ReadInputPin (GPIOD,P5))  - восклицательный знак в данном случае дает отрицание 

 

STM32 немного другой синтаксис команд, но тоже нет ничего сложного так как есть куча примеров.

 

Если какие либо вопросы есть - задавайте, мой уровень по этим контроллерам не очень высокий но тем не менее 2 рабочих коммерческих проекта я на них собрал (изделия готовятся к серийному выпуску)

Изменено пользователем sed_alex
  • Upvote 3
Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...
  • 7 месяцев спустя...

Кто собирал зарядник на ардуинке, для 4-х литий-ионных аккумуляторов? Погрешность тока и напруги должна в долгом режиме зарядки быть в пределах 0,05 для 3,7 вольтовых элементов ёмкостью от 0,25 до 10 ампер часов. В типоразмерах АА или типа D. 

Ссылка на комментарий
Поделиться на другие сайты

Кто собирал зарядник на ардуинке, для 4-х литий-ионных аккумуляторов? Погрешность тока и напруги должна в долгом режиме зарядки быть в пределах 0,05 для 3,7 вольтовых элементов ёмкостью от 0,25 до 10 ампер часов. В типоразмерах АА или типа D

 

ШИМ стабилизация ? Ток как меряется ? Буду на днях встраивать зарядное в металлоискатель но там акб кислотный не обслуживаеммый.

Ссылка на комментарий
Поделиться на другие сайты

Занялся экспериментами 220 - 380 , раз чуть не сжег все - переключил все на 380 а трансформатор забыл - черт дернул случайно заметить атобы БАХ! Схема дорогостоющая , боюсь кокнуть.

Подскажите кто знает схему защиты трансформатора (220В) от случайного подключения к 380В. Трансформатор мелкий (50Вт). Желательно бы чтото быстродействующее.

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Да. Ток, датчиком тока к ардуинке. Если такой есть. Вроде видел такой, на маленькой печатной плате. Аккумуляторы почти пришли. 3,7 вольта 9800 мА/ч. 4 шт.  Варистор хорошо помогает от перенапряжения. А вот от 380 не знаю. 

ШИМ стабилизация ? Ток как меряется ? Буду на днях встраивать зарядное в металлоискатель но там акб кислотный не обслуживаеммый.

Изменено пользователем Лепило
Ссылка на комментарий
Поделиться на другие сайты

@Лепило, Пользовал такие датчики тока ACS712..... хорошая простейшая штука. 
Варистор с предохранителем както опасался , хотя зря наверное - варистор замыкнутый наверняка не даст полуволне проскочить на трансформатор.

@Лепило, Приехали TFT 2.2 дисплеи , время найдется - займусь отладкой, чувствуется придется туго, найти бы код готовый простейший на моем языке написаный. 

Ссылка на комментарий
Поделиться на другие сайты

http://www.ebay.com/itm/XTAR-XP4-Panzer-Battery-Charger-Car-Charger-Lithium-Li-ion-Ni-MH-AA-Battery-/201380750508?hash=item2ee33a64acвот такую нашол сейчас. 

Варистор поможет если есть подходящий предохранитель, без большого запаса по току. У нас таки блоки питания стоят. Но вот от 380 не знаю. От 270 спасает. 

Хотя варистор эт грубая защита. Надо что то по типу маленького безперебойника для компа. 

Ссылка на комментарий
Поделиться на другие сайты

Я вот думаю, а разве бывают батареи формата 18650 с ёмкостью 9800мА? А то заказал, а теперь сомневаюсь. Из Швеции. Они для фонаря ультрафаир. Фанаря нет такого у меня. Эт для подводного фанаря Ikelite 1560 PCM. Он с галогенной лампой, жрёт как "бульдозер".

Я больше 3800-5000 мА сам не видел и не слышал. И они дорогие. Примерно 1000 руб шт. Даже в Китае А эти 275 р 2 шт. Не, в китае есть и по 100 руб шт.

Не понимаю в ценах. 2-е одинаковые на вид батарейки на 3400мА одна 100 руб другая 1700 руб. Блин!!! Наверно просроченные. 

Короче, наверно что не так с ними. Но да ладно, придут, проверю, раскажу. Вместе посмеёмся... 

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...